package com.ihg.hiex.admin.service.account;

import java.util.List;
import java.util.Map;

import com.ihg.hiex.admin.entity.search.CoachingProgressSearch;
import com.ihg.hiex.admin.entity.upload.OnlineAccount;
import com.ihg.hiex.admin.service.DataService;
import com.ihg.hiex.entity.session.Session;
import com.ihg.hiex.entity.user.Administrator;
import com.ihg.hiex.entity.user.Delegate;
import com.ihg.hiex.entity.user.DelegateAttribute;

/**
 * 
 * @author ZEAL
 *
 */
public interface DelegateService extends DataService<Delegate>{
    
    /**
     * 
     * @param ids
     * @return
     */
    public List<Delegate> list(List<Long> ids);
    
    /**
     * 
     * @param session
     * @return
     */
    public List<Delegate> list(Session session);
    
    /**
     * 
     * @param delegate
     * @return
     */
    public Map<String, DelegateAttribute> listAttribute(Delegate delegate);
    
    /**
     * 
     * @param delegates
     * @return
     */
    public Map<String, Map<String, DelegateAttribute>> listAttribute(List<Delegate> delegates);
    
    /**
     * 
     * @param coachId
     * @return
     */
    public List<Delegate> list(Long coachId);
    
    /**
     * 
     * @param search
     * @return
     */
    public List<Delegate> search(CoachingProgressSearch search);

    /**
     * edit delegate
     * 
     * @param delegate
     */
    public void edit(Delegate delegate);
    
	/**
	 * delete delegate
	 * 
	 * @param delegate
	 */
	public void disable(Delegate delegate);
	
	/**
	 * 
	 * @param onlineAccounts
	 */
	public void uploadOnlineAccount(List<OnlineAccount> onlineAccounts);
	
	/**
	 * 
	 * @param delegate
	 * @param name
	 * @param value
	 */
	public void addDelegateAttribute(Delegate delegate, String name, String value, Session session);
	
	/**
	 * 
	 * @param attribute
	 * @param value
	 */
	public void editDelegateAttribute(DelegateAttribute attribute, String value, Session session);
	
	/**
	 * @param admin
	 * @param delegate
	 * @param session
	 */
	public void bindCoach(Administrator admin, Delegate delegate, Session session);

}
